package com.cskaoyan.javse.oop2._1extends._5protected._3example;
/**
 * 案例:
 * Object类当中有一个受保护的成员方法:clone()
 *
 * 
 * @since 17:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 问题1: 这里能否创建Student对象,来调用clone方法?
        /*
            Student类是Object类的子类,它继承了clone()方法
            但是它和Object类是非同包的关系
            不同包下: 必须在子类中,创建子类自身对象,才能够访问父类中继承过来的受保护成员
            在当前Demo类当中,叫在"兄弟姐妹"类中,创建对象,很明显不能访问,因为没有权限
         */
        Student s = new Student();
        // 'clone()' has protected access in 'java.lang.Object'
        // s.clone();

        // 问题2: 这里能够调用谁的对象的clone()方法;
        Demo d = new Demo();
        d.clone();

        // 当重写访问权限后,可以随意访问
        Teacher t = new Teacher();
        t.clone();
    }
}
class Student{
    public void test() throws CloneNotSupportedException {
        // 只能创建Student对象,来访问Student从Object类继承过来的clone方法
        // new Demo().clone();
        new Student().clone();
    }
}
class Teacher{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}